// 递归函数是啥
/*
递归函数 就是 自己调用自己
        深度递归可能导致栈空间耗尽

递归的重点思想
    何时压栈
        调用 和当前函数重名函数时 则开始压栈   
    何时出栈
        当 遇到 return  或者 函数运行完了之后

    什么是栈
        运行时创建 结束时销毁

递归的条件
    递归终止条件  必须要明确 否则容易造成  栈空间耗尽
    递归调用条件

栈内存



栈结构    栈和队列
    队列   排在前面的先吃饭  来的早 吃的早 走的早
    栈      压栈    先来 后走
*/




#include <stdio.h>

// 何时压栈   何时出栈
void while_i_10(int i)
{
    printf("%d\t" , ++i);
    if(i == 10)
    {
        return ;
    }
    else{
        while_i_10(i);
    }
}

// 10 9 8 7 6 5 4 3 2 1 
void while_10_i(int i)
{
    i++;
    if(i == 10)
    {
        printf("%d\t" , i);
        return ;
    }
    else{
        while_10_i(i);
        printf("%d\t" , i);
    }
}

int main(int argc, char const *argv[])
{
    while_10_i(0);
    printf("\n");
    while_i_10(0);
    printf("\n");
    return 0;
}